前言
在前一天的文章中,我們深入探討了資料探勘的各個方面,幫助我們了解數據的本質屬性和潛在規律,並為數據清理做好準備。數據清理是機器學習中不可或缺的一環,這一過程主要包括處理缺失值、異常值、重複數據、數據一致性、數據不平衡、多重共線性問題和無關參數處理。每一個步驟都有其獨特的重要性和方法。
![https://ithelp.ithome.com.tw/upload/images/20240906/20168116AsWzsTZg2P.jpg](https://ithelp.ithome.com.tw/upload/images/20240906/20168116AsWzsTZg2P.jpg)
[來源:Plurk]
數據清理 (Data Cleaning)
數據清理是在資料探勘之後進行的重要步驟,目的是處理在資料探勘過程中發現的各種數據問題,以提高數據質量,為後續的模型建立和分析做好準備。主要包括以下幾個方面:
1. 處理缺失值
根據我們在資料探勘階段的發現,我們可以採取以下策略來處理缺失值:
- 刪除個別數據:如果整個特徵欄的缺失值比例較小(通常小於5%),且是隨機的缺失,可以考慮直接刪除這幾筆個案的數據。例如收集了100筆病患數據,其中某特徵欄位 (如血壓) 中只有 2 個病患的數值缺失,則會把這兩筆數據直接刪除,只保留98筆數據。
Notes:但是也並非永遠都這麼做,如果數據量本身已經很少,再進行刪除可能會導致資訊損失(loss of information)因此,需要找到一個平衡點,即在保持數據質量和資訊完整性之間做出妥協。
- 刪除特徵欄:如果特徵欄有超過 20% 都是空值,這個特徵對於模型來說無法提供有效訊息,導致模型學不到東西,因此會進行整個特徵欄的刪除。
- 填補 (補值):對於稍大比例的缺失值(5%~20%),數據或多或少是可以從中學到一點東西,因此,可以考慮以下填補方法:
- 平均值/中位數/眾數填充補值:適用於隨機缺失的數值型數據。例如,某特徵(如年齡)有部分缺失,可以用數據集中其他病患的年齡平均值來填補。
- 前向/後向填充:適用於時間序列數據。例如,在CPU使用率的時間序列數據中,上一秒的CPU使用率為 90%,下一秒為空值,使用前向填充的方法將上一秒的值填充到下一秒。如果用統計學方法(如平均值)來填補,可能會出現使用率突然急劇下降的情況,這不符合正常邏輯。
- 基於模型的填充:使用其他特徵來預測缺失值。例如,使用其他演算法根據其他病患的相似特徵來預測缺失的血壓值。
- 新增特徵:創建一個新的二元特徵,標記是否缺失,可能會為模型提供額外信息。例如,新增一個標記欄位,記錄病患的年齡是否缺失,值為0表示不缺失,值為1表示缺失。
2. 處理異常值
在資料探勘階段,我們使用了 Z-score 和 IQR 方法來檢測異常值。當發現異常值,我們可以處理的方式包含確認到底是因為測量紀錄錯誤還是其實是真實數據,而確實與正常範圍差太多:
- 若為記錄錯誤:可與收集數據人員確認或回顧數據進行修正。例如,房屋面積為 10,000 平方公尺,售價 500,000 元。這可能是一個記錄錯誤。正常住宅不太可能有如此大的面積,而價格又相對較低。與數據收集人員確認後,發現是小數點錯誤。實際面積應為 100.00 平方公尺,則需進行數據修正。
- 若真實數據確實異常可以先找尋原因並考慮:
- 保留:如果這個異常值是很重要的依據且確實會影響模型判別,例如某些罕見疾病的某些特徵會特別異常,但因為罕見疾病可能一百萬筆數據中只有一筆,那就不能進行刪除。又例如看到房屋面積為 40 平方公尺,售價 15,000,000 元時,我們需要分析雖然價格很高,但可能是位於黃金地段的豪華公寓。進一步調查發現,這確實是市中心的一套高端小戶型公寓,則我們需要保留此數據,因為它代表了市場的一個特殊細分領域。
- 刪除:若發現記錄錯誤但無法回朔數據來源了,或是此異常值的存在會嚴重扭曲分析結果,都會進行刪除。但需要注意謹慎評估刪除對樣本量和代表性的影響。例如看到房屋售價為 999,999,999 元,很明顯這個價格遠超出正常範圍,可能是系統默認值或錯誤代碼,此時需要與數據庫管理員確認,發現這確實是表示「價格未知」的代碼,則需要採用適當的缺失值處理方法進行刪除或填補方法。
3. 處理重複數據
對於在資料探勘階段發現的重複數據,我們可以依照不同方式做處理,包含:
- 完全重複:剔除完全重複的數據記錄,完全一樣的數據反而會增加模型權重,有可能會誤認為這筆數據很重要,而重複計算,平均值也可能會因此而受到影響。
- 部分特徵重複:若為同一個案某特徵重複,且發現是為了準確性重測,建議就會只保留最後一項的那筆測試或是詢問專業人士確定是否需合併重複數據。若不同個案但有重複的特徵欄,有可能確實為真實數據。
4. 數據一致性處理
在資料探勘期間,如果發現數據或類別存在不一致的情況,需要進行進一步清理。這包括:
- 統一單位:確保所有數值型特徵使用相同的度量單位。例如,將所有重量統一為公斤,所有長度統一為公尺,以避免後續不必要的單位錯亂。若發現單位不一致,需要先做單位轉換。
- 類別標籤一致性:確保類別型變量的標籤一致。例如,將 "Male" 和 "M" 統一為一種表示方式。在程式中,不同名稱代表不同意含,因此沒有統一對模型來說會是不一樣的。
- 日期格式統一:確保所有日期數據使用相同的格式,例如統一為 YYYY-MM-DD。
5. 處理數據不平衡
有時候要預測的目標類別分佈不平衡,比如罕見疾病的類別相對少,而正常病患的類別很多。這會導致模型在預測時出現偏差,模型可能會傾向於預測每個病患都是正常的,這樣可以使準確率看起來非常高,於是每一筆數據都會認定正常。但實際上,模型無法有效辨識異常的罕見疾病,從而導致錯誤分類。為了讓比例更加均衡,除了在數據收集時盡量平衡數據之外,還可以採取一些方法來達成數據平衡:
- 過採樣:增加少數類樣本,將少數類的樣本數據生成更多數據。例如,使用 SMOTE 方法(Synthetic Minority Over-sampling Technique)創建少數類的合成樣本,將少數類別的數據運用相近數據進行抽樣,生成更多相近分布的少類別數據,直到與多類別達到相同比例。例如在信用卡欺詐檢測中,欺詐案例通常很少,可以使用SMOTE生成更多的欺詐樣本。
- 欠採樣(Undersampling):減少多數類樣本的數量。這可以通過隨機刪除部分多數類樣本來實現,直到多數類別的數據與少數類別達到相同比例。例如在客戶流失預測中,如果非流失客戶遠多於流失客戶,可以隨機刪除一部分非流失客戶的數據。
- 組合方法:結合過採樣和欠採樣,以達到更好的數據平衡效果。
6. 處理多重共線性
在相關係數分析中,如果發現特徵間存在高度相關性,我們需要處理多重共線性。最基本的方法是刪除其中一個高度相關的特徵,因為這些特徵之間的高度相關性會影響模型的權重分配。然而,有時候我們希望先保留這些特徵,並進一步分析。這些步驟會在特徵工程部分詳細討論。
7. 與目標預測無關參數處理
在資料探勘過程中,可能會遇到一些特徵參數與目標預測完全不相關,這些特徵不僅無法提升模型的準確性,甚至可能會對模型產生負面影響。因此,需要整個刪除這些不合理的特徵參數,並與專業人員確認這些特徵的去除是否正確和合理。這樣可以確保模型只專注於對目標預測有幫助的特徵,提高模型的性能和預測準確性。
結論
以上每一步的處理方法和對應策略,都是為了確保數據的完整性、準確性和一致性,從而提高模型的表現和預測能力。而每一步的處理都應該基於對數據的深入理解和具體問題的需求。在實際應用中,這些步驟可能需要多次迭代,並根據具體情況進行調整。在接下來的章節中,我們將進一步探討特徵工程的步驟與流程。